#include "app_common.h"
#include "sys/time.h"
#include "stdlib.h"
#include "stdio.h"
#include "log.h"
#include "string.h"


/**
 * 工具方法： 获取当前系统时间戳——毫秒 
 */
long app_common_get_curts_ms()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("a= %02x",'a');
    return (tv.tv_sec * 1000 + tv.tv_usec / 1000);

}


/**
 * 把字节数组转为16进制字符串
 */
char* app_common_bytes2hexstr(  char* bytes, int len)
{   
    char* hexstr = (char*)malloc(len * 2 + 1);
    for (int i = 0; i < len; i++)
    {
        sprintf(hexstr+i*2, "%02x",  bytes[i]); //每次转换1个字节变为2个16进制字符
    }
    hexstr[len*2]='\0';
    return hexstr;
    
}


static char hex2ascii(char hex)
{
    if(hex>='0'&&hex<='9')
    {
        return hex-'0';
    }else if(hex>='a'&&hex<='f')
    {
        return hex-'a'+10;
    }else if(hex>='A'&&hex<='F')
    {
        return hex-'A'+10;
    }
    log_error("hex2ascii error:%c",hex);
    return -1;
}

/**
 * //把16进制的字符串转换成字节数组
 * 传入16进制的字符串（数据） ，传入字节数组（空、已有空间）
 * 返回字节数组的长度
 */
int app_common_hexstr2bytes(  char* hexstr, char* bytes_buff  )
{  // "61"  高位"6"  低位"1"  -> 6,1   -> 6*16 +1  ->  97 --> 'a'
    for (size_t i = 0; i <strlen(hexstr); i+=2)
    {
          //高位
         char high=   hex2ascii( hexstr[i]);
          //低位 
         char low=   hex2ascii( hexstr[i+1]);
            //合并
         bytes_buff[i/2] = high*16 + low;
    }
    return strlen(hexstr)/2;

}


void app_common_print_hex(char *hexstr,int len)
{
    for (size_t i = 0; i <len; i++)
    {
        printf("%02x ",hexstr[i]);
    }
    printf("\n");
}